<?php
    
    class PolizasController extends AppController 
	{
		public $uses = array('Poliza','Seguro','Persona');	
		
		public function index()
		{
			$this->layout = 'default_ini';	
		}
		
		public function add_poliza()
		{
			$this->layout = 'default_ini';

			$this->setParametersAdd();
			
			if ($this->request->is('post') || $this->request->is('put') )
			{
				
				$date_desde = $this->getFechaFormAdd($this->request->data['Poliza']['fecha_inic_de_poliza']);
				$date_hasta = $this->getFechaFormAdd($this->request->data['Poliza']['fecha_fin_de_poliza']);
				
				$info_poliza = array( 
											'Poliza'=> array(
																'numero_poliza' => $this->request->data['Poliza']['numero_poliza'],
																'seguro_id' => $this->request->data['Poliza']['seguro_id'],
																'persona_id' => $this->request->data['Poliza']['persona_id'],
																'cant_asegurada' => $this->request->data['Poliza']['cantidad_asegurada'],
																'prima_seguro' => $this->request->data['Poliza']['prima_del_seguro'],
																'fecha_inic_poliza' => $date_desde,
																'fecha_fin_poliza' => $date_hasta
															) 
											
										);
				$this->postAddPoliza($info_poliza);

			}
		}
		
		public function consult_poliza() 
		{
			$this->layout = 'default_ini';
			
			$this->set('fecha_inic', strtotime(date('Y-01-01')));
			$this->set('fecha_fin', strtotime(date('Y-12-31')));
			
			$this->llenar_combobox_tipo_busq();
			$this->llenar_combobox_seguro(1);
			
		}
		public function setParametersAdd()
		{
			$this->llenar_combobox_persona(2);
			$this->llenar_combobox_seguro(2);
			$this->set('fecha_inic',date('Y-m-d'));
			$this->set('fecha_fin',date('Y-m-d'));
		}
		public function getFechaFormAdd($fecha)
		{
			$separacion_fecha = explode('/', $fecha);
			$string_fecha = ''.$separacion_fecha[2].'-'.$separacion_fecha[1].'-'.$separacion_fecha[0];

			return date($string_fecha);
		}
		public function getGridConsultPoliza($tipo_busq,$numero_poliza,$seguro_id,$nombre_persona,$fecha_inic,$fecha_fin)
		{
			
			$this->layout = false;
			if ($this->request->is('get')) 
			{
				$this->llenar_poliza($tipo_busq,$numero_poliza,$seguro_id,$nombre_persona,$fecha_inic,$fecha_fin);
				$this->render('/Elements/GridConsultPoliza');
			}
		}
		
		public function getDetallePoliza($id_poliza)
		{
			$this->layout = false;
			if ($this->request->is('get')) 
			{
				$this->llenar_info_poliza(1, $id_poliza);
				$this->render('/Elements/GetDetallePoliza');
			}
		}
		public function getErrors($errors)
	{
		$errores_view = '';
		
		if (array_key_exists('numero_poliza', $errors))
		{
			$errores_view = $errores_view .'|'.'Numero de Poliza'.'++'.$errors['numero_poliza'][0];
		}
		if (array_key_exists('codigo_articulo', $errors))
		{
			$errores_view = $errores_view .'|'.'Codigo del Articulo'.'++'.$errors['codigo_articulo'][0];
		}
		if (array_key_exists('tipo_articulo_id', $errors))
		{
			$errores_view = $errores_view .'|'.'Tipo del Articulo'.'++'.$errors['tipo_articulo_id'][0];
		}

		return $errores_view;
		
		
	}
	public function parserError($error)
	{
		$array_error = array();	
			
		$string_error = explode('|', $error);
		
		for ($i = 0; $i < count($string_error); $i++)
		{
			if ($i != 0)
			{
				$string_problema = explode('++',$string_error[$i]);
					
				array_push($array_error,array(
												'campo' => $string_problema[0],
												'error' => $string_problema[1],
												)
							);
			}
			
		}
		return $array_error;
	}
		public function getEditPoliza($id_poliza,$error = null)
		{
			$this->layout = false;
			if ($this->request->is('get')) 
			{
				$this->llenar_info_poliza(2, $id_poliza);
				
				if ($error)
				{
					$this->set('errors',$this->parserError($error));	
				}
				else
				{
					$this->set('errors',null);	
				}
				
				$this->render('/Elements/GetEditPoliza');
				
			}
			elseif ($this->request->is('post') || $this->request->is('put') )
			{
					 
				$date_desde = date('Y-m-d',$this->request->data['fecha_inic_de_poliza']);
				$date_hasta = date('Y-m-d',$this->request->data['fecha_fin_de_poliza']);
				
				$info_poliza = array( 
											'Poliza'=> array(
																'id' => $this->request->data['id'],
																'numero_poliza' => $this->request->data['numero_poliza'],
																'seguro_id' => $this->request->data['seguro_id'],
																'persona_id' => $this->request->data['persona_id'],
																'cant_asegurada' => $this->request->data['cant_asegurada'],
																'prima_seguro' => $this->request->data['prima_seguro'],
																'fecha_inic_poliza' => $date_desde,
																'fecha_fin_poliza' => $date_hasta
															) 
											
										);

				
				$this->postEditPoliza($info_poliza);
			}
			
		}
		private function postAddPoliza($info_poliza)
		{
			$this->Poliza->create();
			
			if ($this->Poliza->save($info_poliza))
			{
				$this->setMessageFlash(1, 'Se guardo nueva la Poliza', null);
				$this->redirect(array('action' => 'index'));
			}
			else 
			{
				$this->setMessageFlash(2, 'No se guardo de la Poliza', null);
			}
			
				
			
		}
		private function postEditPoliza($info_poliza)
		{
			$this->Poliza->create();
			
			$this->Poliza->set($info_poliza);
		
			$error = null;
			
			if ($this->Poliza->validates()) 
			{
				if ($this->Poliza->save($info_poliza))
				{
					$this->setMessageFlash(1, 'Se guardo los cambios de la Poliza', null);
				}
				else 
				{
					$this->setMessageFlash(2, 'No se guardo los cambios de la Poliza', null);
				}
			} 
			else 
			{
			    $this->setMessageFlash(2, 'No se guardo los cambios del Poliza',null);
				
				$error = $this->getErrors( $this->Poliza->validationErrors);
				
				
			
			}
			$this->redirect(array(
										'controller' => 'Polizas',
										'action' => 'getEditPoliza',$this->Poliza->id,$error
								   )
							 );
				
			
		}
	
		public function llenar_info_poliza($id_busq, $id_poliza)
		{
			if ($id_busq == 2)
			{
				$this->llenar_combobox_persona(3);
				$this->llenar_combobox_seguro(3);
			}
			$this->infoEspecificoPoliza($id_poliza);
		}
		
		public function llenar_combobox_persona($id_busq)
		{
			$str_query = 'SELECT * 
							FROM personas PE, departamento_personas DP
							WHERE PE.id = DP.persona_id
							AND DP.fecha_fin_persona_departamento IS NULL 
							ORDER BY PE.ci_persona';
			
			$personas = $this->Persona->query($str_query);
			$lista_persona = array();
			
			if ($id_busq == 1)
			{
				array_push($lista_persona, array( 0 => "Todos"));
			}
			
			foreach($personas as $persona)
			{
				array_push($lista_persona, array( 
														$persona['PE']['id'] => $persona['PE']['ci_persona']." - ".
														$persona['PE']['apellido_persona_1'].", ".
														$persona['PE']['nombre_persona_1']
														
													)
								);
			}		
			$this->set('personas',$lista_persona);	
			
		}
		public function InfoEspecificoPoliza($id_poliza)
		{
			$detalle_polizas = $this->Poliza->query(
														'SELECT * 
															FROM polizas PO, personas PE, seguros S 
															WHERE PO.seguro_id = S.id
															AND PO.persona_id = PE.id
															AND PO.id = '.$id_poliza
													);
			$this->set('detalle_polizas',$detalle_polizas);
			
			
			
		}
		public function llenar_poliza($tipo_busq,$numero_poliza,$seguro_id,$nombre_persona,$fecha_inic,$fecha_fin)
		{
			$date_desde = date('Y/m/d',$fecha_inic);
			$date_hasta = date('Y/m/d',$fecha_fin);
			$date_hoy = date('Y/m/d');
			
			$str_query = 'SELECT *
							FROM polizas PO, personas PE, seguros S
							WHERE S.id = PO.seguro_id
							AND PE.id = PO.persona_id';	
			
			if ($tipo_busq == 1)
			{
				$str_query = $str_query.' AND PO.fecha_fin_poliza <=  "'.$date_hoy.'"';
			}
			elseif($tipo_busq == 2) 
			{
				$str_query = $str_query.' AND PO.fecha_inic_poliza <=  "'.$date_hoy.'"'.
										' AND PO.fecha_fin_poliza >=  "'.$date_hoy.'"';
			}
			
			if ($numero_poliza != '*')
			{
				$str_query = $str_query.' AND PO.numero_poliza LIKE "%'.$numero_poliza.'%"';
			}
			/*if ($nombre_persona != '*')
			{
				$str_query = $str_query.' AND (PE.username LIKE "%'.$nombre_cuenta.'%"';
			}*/
			if ($seguro_id != 0)
			{
				$str_query = $str_query.' AND PO.seguro_id = '.$seguro_id;
			}
			
			$str_query = $str_query.' AND PO.fecha_inic_poliza BETWEEN "'.$date_desde.'" AND "'.$date_hasta.'"';
			
			$str_query = $str_query . ' ORDER BY PO.id ASC ';
					
			$polizas = $this->Poliza->query($str_query);
			
			$this->set('polizas',$polizas);
		}
		private function setMessageFlash($id,$mensaje,$nombre_mensaje)
		{
			if (is_null($nombre_mensaje))
			{
				$nombre_mensaje = 'flash';
			}
			switch ($id) 
			{
				case 1: // mensaje bueno
					$this->Session->setFlash($mensaje,'default',array('class'=>'success'),$nombre_mensaje);
					break;
				case 2: // mensaje malo
					$this->Session->setFlash($mensaje,'default',array('class'=>'error-message'),$nombre_mensaje);
					break;
				case 3: // mensaje cuidado
					$this->Session->setFlash($mensaje,'default',array('class'=>'notice'),$nombre_mensaje);
					
					break;
				
				default:
					
					break;
			}
		}
		public function llenar_combobox_seguro($id_busq)
		{
			$seguros = $this->Seguro->find('all');
			$lista_seguros = array();
			if ($id_busq == 1)
			{
				array_push($lista_seguros, array( 0 => "Todos"));
			}
			foreach($seguros as $seguro)
			{
				array_push($lista_seguros,array($seguro['Seguro']['id'] => $seguro['Seguro']['nombre_seguro']));
			}		
			$this->set('seguros',$lista_seguros);	
		}
		public function llenar_combobox_tipo_busq()
		{
			$tipo_busq = array();
			
			array_push($tipo_busq, array( 0 => "Todos"));
			array_push($tipo_busq, array( 1 => "Pólizas Vencidas"));
			array_push($tipo_busq, array( 2 => "Pólizas Vigentes"));
				
			$this->set('tipo_busq',$tipo_busq);
		}
		
		
	}
	
?>